package com.mindskip.xzs.service.impl;
//这段代码是一个服务类中的方法，主要作用是根据条件查询任务并返回分页结果。
//1. 从数据库中获取任务数据，并根据条件进行筛选和分页处理。
//2. 将查询到的任务数据转换为前端展示需要的格式。
//3. 返回经过处理后的任务分页结果，包括任务列表、总数和当前页码等信息。
//在前端通过调用该服务方法，获取符合条件的任务列表数据，并将数据展示在页面上，以供用户查看和操作。
// 同时，该方法也可以用于后续的数据处理和业务逻辑中，比如统计任务数量、生成报表等操作。
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mindskip.xzs.domain.BatchTask;
import com.mindskip.xzs.domain.TaskExam;
import com.mindskip.xzs.repository.BatchMapper;
import com.mindskip.xzs.repository.BatchTaskMapper;
import com.mindskip.xzs.repository.TaskMapper;
import com.mindskip.xzs.service.BatchTaskServer;
import com.mindskip.xzs.service.TaskServer;
import com.mindskip.xzs.utility.DateTimeUtil;
import com.mindskip.xzs.viewmodel.admin.task.TaskPageRequestVM;
import com.mindskip.xzs.viewmodel.admin.task.TaskPageResponseVM;
import com.mindskip.xzs.viewmodel.admin.task.TaskPageResponseVMN;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.LinkedList;
import java.util.List;

/**
 * TaskServerImpl 服务实现类，继承 ServiceImpl 基类，实现 TaskServer 接口
 */
@Service
public class TaskServerImpl extends ServiceImpl<TaskMapper, TaskExam> implements TaskServer {

    // 资源注入
    @Resource
    private BatchTaskServer batchTaskServer;
    @Resource
    private BatchMapper batchMapper;

    /**
     * 分页查询任务
     * @param requestVM 分页请求参数
     * @return TaskPageResponseVMN 分页响应结果
     */
    @Override
    public TaskPageResponseVMN pageList(TaskPageRequestVM requestVM) {
        // 创建查询条件包装器
        QueryWrapper<TaskExam> queryWrapper = new QueryWrapper<>();
        // 创建 ObjectMapper 实例，用于对象转换
        ObjectMapper objectMapper = new ObjectMapper();
        // 创建分页对象
        Page pageInfo = new Page(requestVM.getPageIndex(), requestVM.getPageSize());
        // 设置查询条件，按标题模糊查询
        queryWrapper.like("title", requestVM.getTitle());
        // 执行分页查询
        IPage iPage = this.page(pageInfo, queryWrapper);
        // 创建结果列表
        List<TaskPageResponseVM> taskPageResponseVMList = new LinkedList<>();
        // 遍历查询结果，转换为响应视图模型
        for (Object taskExam : iPage.getRecords()) {
            TaskPageResponseVM taskPageResponseVM = new TaskPageResponseVM();
            taskPageResponseVM.setId(objectMapper.convertValue(taskExam, TaskExam.class).getId());
            taskPageResponseVM.setTitle(objectMapper.convertValue(taskExam, TaskExam.class).getTitle());
            taskPageResponseVM.setCreateUserName(objectMapper.convertValue(taskExam, TaskExam.class).getCreateUserName());
            taskPageResponseVM.setCreateTime(DateTimeUtil.dateFormat(objectMapper.convertValue(taskExam, TaskExam.class).getCreateTime()));
            taskPageResponseVM.setLimitTime(DateTimeUtil.dateFormat(objectMapper.convertValue(taskExam, TaskExam.class).getLimitStartTime()) + "-" + DateTimeUtil.dateFormat(objectMapper.convertValue(taskExam, TaskExam.class).getLimitEndTime()));
            taskPageResponseVMList.add(taskPageResponseVM);
        }
        // 创建分页响应结果对象
        TaskPageResponseVMN taskPageResponseVMN = new TaskPageResponseVMN();
        taskPageResponseVMN.setList(taskPageResponseVMList);
        taskPageResponseVMN.setTotal(iPage.getTotal());
        taskPageResponseVMN.setPageNum(iPage.getCurrent());
        return taskPageResponseVMN;
    }

    /**
     * 获取仅属于某个批次的任务
     * @param batchId 批次ID
     * @return List<TaskExam> 任务列表
     */
    @Override
    public List<TaskExam> getTaskExamOnly(String batchId) {
        // 获取所有任务
        List<TaskExam> taskExams = this.list();
        // 创建结果列表
        List<TaskExam> taskExamList = new LinkedList<>();
        // 遍历任务，筛选属于指定批次的任务
        for (TaskExam taskExam : taskExams) {
            if (batchTaskServer.getBathIdByTaskId(taskExam.getId()).size() <= 0 || batchTaskServer.getBathIdByTaskId(taskExam.getId()).get(0).equals(batchId)) {
                taskExamList.add(taskExam);
            }
        }
        return taskExamList;
    }

    /**
     * 根据创建用户ID获取任务
     * @param id 用户ID
     * @return List<TaskExam> 任务列表
     */
    @Override
    public List<TaskExam> getTaskExamByCreateUserId(Integer id) {
        // 创建查询条件包装器
        QueryWrapper<TaskExam> taskExamQueryWrapper = new QueryWrapper<>();
        // 设置查询条件，按创建用户ID查询
        taskExamQueryWrapper.eq("create_user", id);
        return this.baseMapper.selectList(taskExamQueryWrapper);
    }
}
